//
//  YRStatus.swift
//  新浪微博
//
//  Created by Viper on 16/6/28.
//  Copyright © 2016年 Viper. All rights reserved.
//

import UIKit

class YRStauts: NSObject {
   
    ///微博创建时间
    var created_at :String?
    
    ///微博ID
    var id :Int64 = 0
    
    ///微博信息内容
    var text : String?
    
    ///微博来源
    var source : String?{
        
        didSet{
            
            sourceAttr = getSourceStr(source)
            
        }
        
    }
    
    ///用户信息
    var user :YRUesr?
    
    ///转发微博
    var retweeted_status : YRStauts?
    
    ///配图数组
    var pic_urls:[YRPicrureInfo]?

    ///微博来源
    var sourceAttr : NSMutableAttributedString?
    
    ///微博时间
    var createAtStr : String?{
        
        return getWbTimeStr(created_at ?? "")
    }
    
    ///转发数
    var reposts_count : Int = 0{
        
        didSet{
           
            repostsStr = getCountString(reposts_count, title: "转发")
            
        }
    }
    ///评论数
    var comments_count : Int = 0{
        
        didSet{
            
           commentsStr = getCountString(comments_count, title: "评论")
            
        }
    }
    ///表态数
    var attitudes_count : Int = 0{
        
        didSet{
            
            attitudesStr = getCountString(attitudes_count, title: "赞")
            
        }
    }

    var repostsStr :String?
    
    var commentsStr : String?
    
    var attitudesStr : String?
    
    //kvc构造函数
    init(dict: [String: AnyObject]) {
        
        super.init()
        setValuesForKeysWithDictionary(dict)
    }
 
    override func setValue(value: AnyObject?, forKey key: String) {
        
        if key == "user" {
            
            //判断可选值是否存在 是否能转成字典
            
            guard let v = value as?  [String : AnyObject] else{
                
                print("可选值不存在或者不能转成字典")
                return
            }
            
            //需要我们手动字典转模型
            let u = YRUesr(dict: v)
            
            //需要我们程序员自己对该属性赋值
            
            user = u
            
        }else if key == "retweeted_status"{
            //判断可选值是否有值 而且是否可以转成字典
            guard let v = value as? [String : AnyObject]else{
                return
            }
            let s = YRStauts (dict: v)
            
            //给转发模型赋值
            retweeted_status = s
            
        }else if key == "pic_urls" {
                        //判断是否有值 而且是否可以转成数组
            guard let v = value as? [[String : AnyObject]]else{
                return
            }
            //创建一个临时数组
            var tempArray : [YRPicrureInfo] = [YRPicrureInfo]()
            //遍历数组
            for dic in v {
                
                let p = YRPicrureInfo(dict: dic)
                tempArray.append(p)
            }
            //对pic_urls赋值
            pic_urls = tempArray
        }
        
        else{
            
            //如果重写了setValue for key 我们需要系统帮我们通过kvc字典转模型 父类
            
          super.setValue(value, forKey: key)
        }
        
    }
    
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        
    }
    
    func getCountString(count : Int,title : String)->String{
        
        if count <= 0 {
            
            return title
            
        }else if count > 0 && count < 10000{
            
            return "\(count)"
        }else{
            
            let countF = CGFloat(count / 1000)/10
            
            var countStr = "\(countF)"
            //            containsString 判断字符串是否包含字符
            if countStr.containsString(".0"){
                countStr = countStr.stringByReplacingOccurrencesOfString(".0", withString: "")
            }
            
            return "\(countF)万"
        }
    }
    func getSourceStr(source : String?)->NSMutableAttributedString{
        //判断可选值是否有值 而且是否包含字符串
        
        guard let s = source where s.containsString("\">") else{
            
            let r = "来自 星球的地址"
            
            return getSourceAttributed(r)
        }
        
        let start = s.rangeOfString("\">")!
        let end = s.rangeOfString("</a")!
        // 字符串截取结果
        let result = s.substringWithRange(start.endIndex..<end.startIndex)
        //完成字符串拼接
        let r = "来自 \(result)"
        return  getSourceAttributed(r)
        
    }
    //通过字符串生成副文本
    func getSourceAttributed(result : String)->NSMutableAttributedString{
        
        //实例化一个副文本
        let attributed = NSMutableAttributedString(string: result)
        
        //获取range
        let range = (result as NSString).rangeOfString("来自")
        //设置属性
        attributed.addAttributes([NSForegroundColorAttributeName:ThemeColor], range: range)
        
        
        return attributed
        
    }

    
}

extension YRStauts{
    
    /*
     
     Thu Jun 30 22:20:06 +0800 2016
     Thu Jun 30 22:17:32 +0800 2016
     Thu Jun 30 22:16:02 +0800 2016
     Thu Jun 30 22:14:29 +0800 2016
     
     */
    //处理微博时间方法
    func getWbTimeStr(creatAt : String)->String{
        // 时间格式
        let df = NSDateFormatter()
        // 格式
        df.dateFormat = "EEE MMM dd HH:mm:ss z yyyy"
        // 设置地区 （如果在真机上 可能出现时间不对 需要程序员记得设置）
        df.locale = NSLocale(localeIdentifier: "en_US")
        // 微博时间
        let wbDate = df.dateFromString(creatAt)!
        //测试
        //        let wbDate = wbDate1.dateByAddingTimeInterval(-3600 * 12 * 24 * 365)
        
        //判断是否是今年
        let isThisYear : Bool = getWbIsTishYear(wbDate)
        //代表是今年
        if isThisYear {
            //日历类
            let calendar = NSCalendar.currentCalendar()
            
            //如果是今天
            if calendar.isDateInToday(wbDate) {
                //秒数差值
                let s = NSDate().timeIntervalSinceDate(wbDate)
                
                if s < 60 {
                    
                    return "刚刚"
                }else if s >= 60 && s < 60 * 60{
                    
                    return "\(Int(s/60))分钟前"
                }else{
                    
                    return "\(Int(s/3600))小时前"
                }
                
                
            }else if calendar.isDateInYesterday(wbDate){
                //昨天
                df.dateFormat = "昨天 HH:mm"
                return  df.stringFromDate(wbDate)
                
            }else{
                //其他
                df.dateFormat = "MM月dd日 HH:mm"
                return  df.stringFromDate(wbDate)
            }
            
            
            
        }else{
            // 代表不是今年 显示格式: 2015年05月05日 10:10
            df.dateFormat = "yyyy年MM月dd日 HH:mm"
            let result = df.stringFromDate(wbDate)
            return result
            
        }
        
    }
    //判断微博时间是否是今年
    func getWbIsTishYear(wbDate : NSDate)->Bool{
        
        //判断是否是今年
        // 时间格式
        let df = NSDateFormatter()
        
        // 设置地区 （如果在真机上 可能出现时间不对 需要程序员记得设置）
        df.locale = NSLocale(localeIdentifier: "en_US")
        df.dateFormat = "yyyy"
        //微博时间
        let wbTimeStr = df.stringFromDate(wbDate)
        //当前时间
        let currentTimeStr = df.stringFromDate(NSDate())
        //        print(currentTimeStr)
        
        if wbTimeStr == currentTimeStr {
            
            return true
        }else{
            
            return false
        }
        
    }
    
}
